<?php 
if ( ! defined('BASEPATH')) exit('No direct script access allowed');

/*
 * 后台常见的方法
 * author 王建
 * time 2014_01_20
 * 
 */


if( !function_exists("result_to_towf_new") ){
	
 function result_to_towf_new($vDataResult, $ret,$errmsg,$sigInfo){
	$result_arr = array();
	$result_arr["resultcode"] = (string)$ret;
	$tmp_arr["errmsg"] = $errmsg;
	$tmp_arr["obj"] = $sigInfo;
	$vResult = array();
	$tmp_arr["list"] = $vDataResult;
	$result_arr["resultinfo"] =  $tmp_arr;

	return json_encode($result_arr);
}

}
/**
 * 数组转化json
 
 * $array	array 
 * $ret	int code 值
 * $errmsg	string  错误信息
 * @return	string  返回json值
 */
if(!function_exists("result_to_json")){
	function result_to_json($array,$code = 1 ,$message = 'success'){
		$array['resultcode'] = $code ;
		$array['errmsg'] = $message ;
		echo json_encode($array) ;
	}
}

//获取客户端的IP地址
if( ! function_exists("get_client_ip")){
	function get_client_ip(){
		if (getenv("HTTP_CLIENT_IP") && strcasecmp(getenv("HTTP_CLIENT_IP"), "unknown")){
			$ip = getenv("HTTP_CLIENT_IP");
		}else if (getenv("HTTP_X_FORWARDED_FOR") && strcasecmp(getenv("HTTP_X_FORWARDED_FOR"), "unknown")){
			$ip = getenv("HTTP_X_FORWARDED_FOR");
		}else if (getenv("REMOTE_ADDR") && strcasecmp(getenv("REMOTE_ADDR"), "unknown"))
			$ip = getenv("REMOTE_ADDR");
		else if (isset($_SERVER['REMOTE_ADDR']) && $_SERVER['REMOTE_ADDR'] && strcasecmp($_SERVER['REMOTE_ADDR'], "unknown"))
			$ip = $_SERVER['REMOTE_ADDR'];
		else
			$ip = "unknown";
		return($ip);
	}
}
//数组转换为一维数组
if( ! function_exists("arrayChange")){
	
	function arrayChange($str){
		static $arr2;
		foreach($str as $v){
			if(is_array($v)){
				$this->arrayChange($v);
			}else{
				$arr2[]=$v;
			}
		}
		return $arr2;
	}
}

/**
 
 * 处理form 提交的参数过滤
 * $string	string  需要处理的字符串或者数组
 * $force	boolean  强制进行处理
 * @return	string 返回处理之后的字符串或者数组
 */
if(!function_exists("daddslashes")){
	function daddslashes($string, $force = 0) {
		if(!get_magic_quotes_gpc() || $force) {
			if(is_array($string)) {
				foreach($string as $key => $val) {
					$string[$key] = daddslashes($val, $force);
				}
			} else {
				$string = addslashes($string);
			}
		}
		return $string;
	}
}
/*
32	函数名称：verify_id()
33	函数作用：校验提交的ID类值是否合法
34	参　　数：$id: 提交的ID值
35	返 回 值：返回处理后的ID
36	
*/
if( !function_exists("verify_id") ){
	function verify_id($id=null) {
		if (!$id) { 
			return 0;
		} // 是否为空判断
		elseif (inject_check($id)) { 
			return 0;
		} // 注射判断
		elseif (!is_numeric($id)) { 
			return 0 ;			
		} // 数字判断
		$id = intval($id); // 整型化		 
		return $id;
	}
}

/*
 *检测提交的值是不是含有SQL注射的字符，防止注射，保护服务器安全
 *参　　数：$sql_str: 提交的变量
 *返 回 值：返回检测结果，ture or false 
 */

if( !function_exists("inject_check") ){
	function inject_check($sql_str) {
		return @eregi('select|insert|and|or|update|delete|\'|\/\*|\*|\.\.\/|\.\/|union|into|load_file|outfile', $sql_str); // 进行过滤
	}
}

/**
 *  处理禁用HTML但允许换行的内容
 *
 * @access    public
 * @param     string  $msg  需要过滤的内容
 * @return    string
 */
if ( ! function_exists('TrimMsg'))
{
    function TrimMsg($msg)
    {
        $msg = trim(stripslashes($msg));
        $msg = nl2br(htmlspecialchars($msg));
        $msg = str_replace("  ","&nbsp;&nbsp;",$msg);
        return addslashes($msg);
    }
}




/**
 * PHP判断字符串纯汉字 OR 纯英文 OR 汉英混合
 * return 1: 英文
 * return 2：纯汉字
 * return 3：汉字和英文
 */

function utf8_str($str){
    $mb = mb_strlen($str,'utf-8');
    $st = strlen($str);
    if($st==$mb)
        return 1;
    if($st%$mb==0 && $st%3==0)
        return 2;
    return 3;
}	

/**
 +----------------------------------------------------------
 * 字符串截取，支持中文和其他编码
 +----------------------------------------------------------
 * @static
 * @access public
 +----------------------------------------------------------
 * @param string $str 需要转换的字符串
 * @param string $start 开始位置
 * @param string $length 截取长度
 * @param string $charset 编码格式
 * @param string $suffix 截断显示字符
 * @param string $strength 字符串的长度
 +----------------------------------------------------------
 * @return string
 +----------------------------------------------------------
 */
function msubstr($str, $start=0, $length, $strength,$charset="utf-8", $suffix=true)
{
    if(function_exists("mb_substr")){
    	if($suffix){
    		if($length <$strength ){
    			return mb_substr($str, $start, $length, $charset)."....";
    		}else{
    			return mb_substr($str, $start, $length, $charset);
    		}   		
    	}else{
    		return mb_substr($str, $start, $length, $charset);
    	}

    	
    }elseif(function_exists('iconv_substr')) {
    	if($suffix){//是否加上......符号
    		if($length < $strength){
    			return iconv_substr($str,$start,$length,$charset)."....";
    		}else{
    			return iconv_substr($str,$start,$length,$charset) ;
    		}  		
    	}else{
    		return iconv_substr($str,$start,$length,$charset) ;
    	}

       
    }
    $re['utf-8']   = "/[\x01-\x7f]|[\xc2-\xdf][\x80-\xbf]|[\xe0-\xef][\x80-\xbf]{2}|[\xf0-\xff][\x80-\xbf]{3}/";
    $re['gb2312'] = "/[\x01-\x7f]|[\xb0-\xf7][\xa0-\xfe]/";
    $re['gbk']    = "/[\x01-\x7f]|[\x81-\xfe][\x40-\xfe]/";
    $re['big5']   = "/[\x01-\x7f]|[\x81-\xfe]([\x40-\x7e]|\xa1-\xfe])/";
    preg_match_all($re[$charset], $str, $match);
    $slice = join("",array_slice($match[0], $start, $length));
    if($suffix){
    	return $slice."…";
    } else{
    	return $slice;
    }
   
}


/**
 +----------------------------------------------------------
 * 字符串截取，支持中文和其他编码
 +----------------------------------------------------------
 * @static
 * @access public
 +----------------------------------------------------------
 * @param string $str 需要计算的字符串
 * @param string $charset 字符编码
 +----------------------------------------------------------
 * @return length int
 +----------------------------------------------------------
 */

function abslength($str,$charset= 'utf-8'){
    if(empty($str)){
        return 0;
    }
    if(function_exists('mb_strlen')){
        return mb_strlen($str,'utf-8');
    }
    else {
        @preg_match_all("/./u", $str, $ar);
        return count($ar[0]);
    }
}


//获取登录的用户名
if( !function_exists("login_name")){
	function login_name(){
		@session_start();
		@ob_clean() ;
		if(isset($_SESSION['username'])){
			return $_SESSION['username'];
		}else{
			return '' ;
		}
		
	}
}

//获取登录的用户所在的群组
if(!function_exists("group_name")){
	function group_name(){
		@ob_clean() ;
		@session_start() ;
		if(isset($_SESSION['group_name'])){
			return $_SESSION['group_name'];
		}else{
			return '' ;
		}
		
	}	
}

/*
 *@记录系统操作日志文件到数据库里面 
 **sql 是要插入数据库中的 log_sql的值 
 *$action 动作
 *$person 操作人
 *$ip ip地址
 *status 操作是否成功 1成功 0失败
 *message 失败信息
 *groupname_ 定义数据库连接信息的时候的 groupname
 */
if(!function_exists("write_action_log") ){
	function write_action_log($sql,$action = '' ,$person = '' ,$ip = '',$status = '1' ,$message = '' , $groupname_ = "real_data"){
		if(!config_item('is_write_log_to_database')){//是否记录日志文件到数据表中
			return false ;
		}
		
		$sql = str_replace("\\", "", $sql); // 把\进行过滤掉
		$sql = str_replace("%", "\%", $sql); // 把 '%'前面加上\
		$sql = str_replace("'", "\'", $sql); // 把 ''过滤掉
		$message = daddslashes($message ) ;
		$time = date("Y-m-d H:i:s",time());
		$time_table = date("Ym",time());
		

		$table_pre = table_pre($groupname_) ;
		
	$sql_table = <<<EOT
CREATE TABLE IF NOT EXISTS `{$table_pre}common_log_{$time_table}` (
  `log_id` mediumint(8) NOT NULL auto_increment,
  `log_action` varchar(50) NOT NULL,
  `log_person` varchar(16) NOT NULL,
  `log_time` datetime NOT NULL,
  `log_ip` char(15) NOT NULL,
  `log_sql` varchar(255) NOT NULL,
  `log_status` tinyint(1) NOT NULL default '1',
  `log_message` varchar(255) NOT NULL,
  PRIMARY KEY  (`log_id`),
  KEY `index_` (`log_action`,`log_person`,`log_time`,`log_status`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;		
EOT;
		$ci = &get_instance(); //初始化 为了用方法
		$d = $ci->load->database($groupname_,true);
		$d->query($sql_table);
		$sql_log = "INSERT INTO `{$table_pre}common_log_{$time_table}`(`log_action`,`log_person`,`log_time`,`log_ip`,`log_sql`,`log_status`,`log_message`)VALUES('{$action}','{$person}','{$time}','{$ip}','{$sql}','{$status}','{$message}')" ;
		$d->query($sql_log);
		
	}
}

/*
 *return table 前缀 
 * 
 */
if(!function_exists("table_pre")){
	function table_pre($group){
		$table_pre = '' ;
		if($group){
			$ci = &get_instance(); //初始化 为了用方法
			$d = $ci->load->database($group,true);
			
			$table_pre =  $d->table_pre;
		}
		return $table_pre ;
		
	}
}


//定义操作动作对应的中文
if( ! function_exists("return_action_array")){
	function return_action_array(){
		return array(
				'top_1'=>'系统设置',
				'system_setting'=>'系统基本参数设置',
				'system_setting_make_data'=>'系统参数生成数据文件',
				'system_setting_add_varname'=>'添加系统新变量',
				'system_setting_edit_varname'=>'修改系统变量',
				'system_setting_del_varname'=>'删除系统变量',
				######################
				'top_2'=>'站长',
				'log_update_user_group'=>'修改用户对应的组',
				'log_update_del_group'=>'删除用户对应的后台用户组',
				'log_add_duty'=>'添加职务',
				'log_del_duty'=>'删除职务',
				'log_update_permition'=>'修改职务对应的权限',
				#######################
				'log_update_add_admin'=>'添加管理员',
				'log_update_del_admin'=>'删除管理员',
				'log_system_add'=>'添加系统用户',
				'log_system_del'=>'系统用户删除',
				##############################
				'top_3'=>'用户',
				'log_add_user'=>'添加用户',
				#################################
				'top_4'=>'后台模块树',
				'log_add_tree'=>'添加模块树',
				'log_update_tree'=>'修改模块树',
				'log_delete_tree'=>'删除模块树',
				'log_edit_treetype'=>'修改模块类别',
				'log_add_treetype'=>'模块树类别添加',
				'log_del_treetype'=>'删除模块树类别',
		
				######################################
				'top_5'=>'后台发布消息',
				'log_publish_message'=>'投递消息',
				############################
				'top_6'=>'后台文件管理',
				'log_mkdir_dir'=>'创建目录',
				'log_delete_file'=>'删除文件/目录',
				'log_upload_file'=>'上传文件',
				################################
				'top_7'=>'插件管理器',
				'log_plugin_del'=>'插件删除',
				'log_plugin_edit'=>'插件修改',
				'log_plugin_add'=>'插件添加',
				###############################
				'top_8'=>'后台系统用户登录',
				'log_manager_user_login'=>'后台登录',
				'log_manager_user_editpasswd'=>'后台修改密码',
				#################导航管理################
				'top_9'=>'后台导航菜单',
				'log_nav_manager_add'=>'导航添加',
				'log_nav_manager_del'=>'导航删除',
				'log_nav_manager_edit'=>'导航修改',
				'log_nav_manager_make'=>'导航生成',
		);
	}
}


//根据操作动作返回对应的字符串
if(!function_exists("get_log_action_str")){
	function get_log_action_str($action){
		$array = return_action_array() ;
		if(!isset($array[$action])){
			return  '' ;
		}
		return $array[$action] ;
		
	}
}

/**
 * 将数据格式化成树形结构
 * @author 王建
 * @param array $items
 * @return array
 */
if(!function_exists("genTree9")){
	function genTree9($items,$id = 'id' ,$pid = 'pid' ,$child = 'children' ) {
	    $tree = array(); //格式化好的树
	    foreach ($items as $item)
	        if (isset($items[$item[$pid]]))
	            $items[$item[$pid]][$child][] = &$items[$item[$id]];
	        else
	            $tree[] = &$items[$item[$id]];
	    return $tree;
	}	
}
/*
    $dir 创建的目录名称
    author wangjian
    time 2012/09

*/
if(!function_exists("s_mkdir")){
	function s_mkdir($dir){
	    
	    if(!is_dir($dir)){
	        s_mkdir(dirname($dir));
	        mkdir($dir,0777);
	    }
	    
	}
}
 


?>